// 空函数
const noop = function () {
}

// 上拉加载 手势
import TouchRefresh from "./TouchRefresh"


export class scroll extends TouchRefresh {
    constructor(opt) {
        super(opt)

        const {
            el,
            loadMore,
            distance = 0,
            pullIconEl
        } = opt

        // 允许上拉滚动加载
        this.canPullUp = true

        // 允许下拉刷新
        this.canPullDown = true

        /*// 滚动的容器， 默认是body
        this.el = el || document // 滚动盒子*/

        // 在距离底部多长距离时触发事件
        this.distance = distance

        // 滚动到底部时触发
        this.loadMore = loadMore || noop

        this.initNativeScroll()


    }

    /*
   * 初始化上拉加载滚动监控
   * */
    initNativeScroll() {
        this.el.addEventListener("scroll", this._onscroll.bind(this))
    }

    // 给el 绑onscroll 事件
    _onscroll() {
        console.log(2222)
        if (this.getScrollTop() + this.getClientHeight() + this.distance == this.getScrollHeight()) {
            console.log('下拉刷新了')
            //此处发起AJAX请求
            if (this.canPullUp) {
                this.loadMore && this.loadMore();
            }
        }
    }

    // 开启上拉滚动加载
    enablePullUp() {
        this.canPullUp = true
    }

    // 关闭上拉滚动加载
    disablePullUp() {
        console.log("关闭上拉")
        this.canPullUp = false
    }

    // 关闭下拉刷新
    disablePullDown() {
        this.canPullDown = true
    }

    // 开启下拉刷新
    enablePullDown() {
        this.canPullDown = false
    }

    // 获取当前可视范围的高度
    getClientHeight() {
        let clientHeight = 0;
        if (this.el.nodeName === "#document") {
            if (document.body.clientHeight && document.documentElement.clientHeight) {
                clientHeight = Math.min(document.body.clientHeight, document.documentElement.clientHeight);
            } else {
                clientHeight = Math.max(document.body.clientHeight, document.documentElement.clientHeight);
            }
            return clientHeight;
        }
        else {
            console.log(this.el.clientHeight, "视高")
            return this.el.clientHeight // el 样式 设置了overflow:hidden 不包括border 高度
        }
    }

    /*
        获取文档完整的高度 (body 不能定高度、不能定位)
    */
    getScrollHeight() {
        if (this.el.nodeName === "#document") {
            return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
        }
        return this.el.scrollHeight
    }


    onRefresh() {
    }

    // 变量销毁
    destroy() {
        this.el.removeEventListener('scroll', this._onscroll(), false)
        this.el = null
        this.topEl = null

    }

    //tips：如果想距离底部50px就执行刷新，请将if条件改为getScrollTop() + getClientHeight()+50> getScrollHeight()即可实现。

}

export default scroll
